package pt.compflow.tools;

/**
 * Replaces Cloneable
 * 
 * Not using clone() because of: http://stackoverflow.com/questions/2326758/how-to-properly-override-clone-method/2326801#2326801
 * Also because it doesn't enforce the existence of the method clone() during implementation (compile-time)
 *
 * Unlike Cloneable, this interface uses the Generic type T, which allows for correctly typed return types for copy()
 */
public interface Copyable<T> {

	/**
	 * Same purpose as the traditional clone()
	 * @return
	 */
	public T copy();
}
